#include "ClasseNoListaL.h"
#include "ClassePilha.h"

//====================================
Pilha::Pilha()
{
  topo = NULL;
  tamanho = 0;
}
//====================================
bool Pilha::Empty()
{
  if (topo == NULL)
  return true;
  else
  return false;
}
//====================================
No * Pilha::getTopo()
{
  return topo;
}
//====================================
int Pilha::getTamanho()
{
  return tamanho;
}
//====================================
void Pilha::Push(String entrada)
{
 if (!(Empty()))
 {
  No * ponteiro = new No(entrada, topo);
  topo = ponteiro;
 }
 else
 {
  No * ponteiro = new No(entrada);
  topo = ponteiro;
 }
 tamanho ++;
}
//====================================
String Pilha::Pop()
{
 if (!(Empty()))
 {
   String retorno;
   No * deletado;
   retorno = topo->getPalavra();
   deletado = topo;
   topo = topo->getProximo();
   deletado->~No();
   deletado = NULL;
   tamanho --;
   return(retorno);
 }
 else
 {
   return "";
 }
}
//======================================
String Pilha::Stacktop()
{
 if (!(Empty()))
 {
   return(topo->getPalavra());
 }
 else
 {
   return "";
 }
}
//=====================================
String* Pilha::VetorGeral()
{
  int contador;
  No * percorre = getTopo();
//  String vg[tamanho];     // Compilador nao aceita dessa forma
     // Alocacao dinamica sem um delete[] correspondente nesta funcao:
     // necessita ser desalocado em codigo externo
  String * vg = new String[tamanho];

  for (contador=0; contador<tamanho; contador++)
  {
    vg[contador] = percorre->getPalavra();
    percorre = percorre->getProximo();
  }
  return vg;
}

//=====================================
